﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10_接口的特点1
{
    class Program
    {
        static void Main(string[] args)
        {
            //1 接口不允许实例化对象
            //2 IFlyable fly = new IFlyable();是错误的
            //3 可以实例化子类
            //4 接口与接口之间可以继承，并且可以多继承
            //5 实现接口的子类必须实现该接口的全部成员
            //6 一个类可以同时继承一个类和多个接口，如果一个类同时继承了父类A，实现了接口IA，那么语法上A必须写在IA的前面
            IFlyable fly = new Bird();
            fly.Fly();
            Console.ReadKey();
        }
    }

    public interface M1
    {
        void Test1();
    }

    public interface M2
    {
        void Test2();
    }

    public interface M3
    {
        void Test3();
    }

    public interface M:M1,M2,M3
    {
        void Test();
    }

    /// <summary>
    /// 类M继承了接口M，M继承了接口M1\M2\M3，所以类M必须包括他们每个接口下的方法
    /// </summary>
    public class Test : M
    {
        public void Test1()
        {
            throw new NotImplementedException();
        }

        public void Test2()
        {
            throw new NotImplementedException();
        }

        public void Test3()
        {
            throw new NotImplementedException();
        }

        void M.Test()
        {
            throw new NotImplementedException();
        }
    }

    public class Person : IFlyable
    {
        public void Fly()
        {
            Console.WriteLine("大婶带我飞");
        }
    }

    public class Bird : IFlyable
    {
        public void Fly()
        {
            Console.WriteLine("鸟儿带你飞");
        }
    }

    public interface IFlyable
    {
        void Fly();
    }
}
